package com.gnerv.battle.boot.module.base.service;

import com.gnerv.battle.boot.module.base.model.bo.AccountBO;
import com.gnerv.battle.boot.module.base.model.dto.AccountDTO;
import com.gnerv.battle.boot.module.base.model.dto.AccountDetailsDTO;
import lombok.NonNull;

import java.util.List;
import java.util.Set;

/**
 * @author Gnerv LiGen
 */
public interface AccountService {

    /**
     * @param accountBO
     * @return
     */
    boolean create(AccountBO accountBO);

    /**
     * @param ukId
     * @return
     */
    boolean deleteByUkId(String ukId);

    /**
     * @param accountBO
     * @return
     */
    boolean updateByUkId(AccountBO accountBO);

    /**
     * @param ukId
     * @return
     */
    AccountDTO selectByUkId(String ukId);

    AccountDTO selectByUsername(String username);

    AccountDetailsDTO selectLoginByUsername(String username);

    /**
     * @param username
     * @param size
     * @return
     */
    List<AccountDTO> listByUsername(String username, Integer page, Integer size);

    /**
     * @param roleUkId
     * @return
     */
    List<AccountDTO> listByRoleUkId(String roleUkId);

    List<AccountDTO> listByOrgUkId(String orgUkId);

    boolean bindRole(@NonNull String accountUkId, @NonNull Set<String> roleUkIdList);

    boolean unbindRole(@NonNull String accountUkId);

    int countByUsername(String username);

    boolean isExist(String username);

    Set<String> listUkIdByRoleUkIdAndOrgUkId(Set<String> roleUkIdSet, Set<String> orgUkIdSet);
}
